package zww.study.basic;

public class MethodStudy {
    public static void main(String[] args) {

        // 方法是具有独立功能的代码块组织成为一个整体，使其具有特殊功能的代码集
        // 方法的定义
        // 方法的调用
        // 形参实参: 形参：方法定义中的参数==变量定义格式
        // ·········实参：方法调用中传入的参数==等同于变量或常量
        // 方法参数传统的是引用类型，传入方法中的是内存地址

        myMethod(); // 输出hello
        my2Method(1, 2); // 输出3
        my3Method();
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前:" + arr[1]);
        change(arr);
        System.out.println("调用change方法后:" + arr[1]);

        // 方法的重载：是指"同一类中"的"多个方法"之间的关系:
        // 多个方法在同一类中，多个方法具有相同的方法名，多个方法的参数不相同，类型不同或者数量不同
        // 判断方法的重载：重载仅对应方法的定义，与方法的调用无关，调用方式参照标准格式

        // 重载仅针对同一个类中方法的名称与参数进行识别，与返回值无关，
        /*
         * 方法的调用过程:每个方法在调用执行的时候,都会进入栈（压栈）内存，并且拥有
         * 独立的内存空间，方法内部代码调用完毕后，会从栈内存中弹栈（出栈）消失；
         *
         * 基本数据类型的参数，形式参数的改变，不影响实际参数
         * 对于引用类型的参数，形式参数的改变，影响实际参数的值
         * 引用数据类型的传参，传入的是地址值，内存中会造成两个引用指向同一个内存的效果，所以即使方法
         * 弹栈，堆内存中的数据也已经是改变后的结果
         *
         * 每个方法在栈内存中，都会有独立的栈空间，方法运行结束后就会弹栈消失
         * */


    }

    // 方法定义一：无参数方法定义与调用
    public static void myMethod() {
        System.out.println("hello");
    }

    // 方法定义二：带参数方法的定义和调用：
    // 参数的数据类型和变量名不能缺少
    public static void my2Method(int num1, int num2) {
        System.out.println(num1 + num2);
        // 打印不换行
        System.out.print(num1+",");
    }

    // 方法定义三：带返回值方法的定义和调用
    // 方法定义时,return后面的返回值与方法定义上的数据类型要匹配
    public static int my3Method() {
        int a = 1;
        return a;
    }

    public static void change(int[] arr) {
        arr[1] = 200;
    }


}
